// class Solution {
// public:
//     vector<vector<int>> threeSum(vector<int>& nums) {
//         // 有序数组 就要想到二分 和 双指针 可以降低一维 排序 固定一个数
//         // 后面使用双指针
//         vector<vector<int>> sum;
//         sort(nums.begin(), nums.end());
//         int n = nums.size() - 1;
//         for (int i = 0; i <= n; i++) {
//             if (i > 0 && nums[i] == nums[i - 1]) {
//                 continue; // 跳过重复的固定数
//             }
//             int cur = i + 1;
//             int dest = n;
//             while (cur < dest) {
//                 if ((nums[cur] + nums[dest]) > (-nums[i])) {
//                     dest--;
//                 } else if ((nums[cur] + nums[dest]) < (-nums[i])) {
//                     cur++;
//                 } else {
//                     vector<int> m;
//                     m.push_back(nums[i]);
//                     m.push_back(nums[cur]);
//                     m.push_back(nums[dest]);
//                     sum.push_back(m);
//                     while (cur < dest && nums[cur] == nums[cur + 1]) {
//                         cur++;
//                     }
//                     // 跳过右侧重复元素
//                     while (cur < dest && nums[dest] == nums[dest - 1]) {
//                         dest--;
//                     }
//                     dest--;
//                     cur++;
//                 }
//             }
//         }
//         return sum;
//     }
// };
// https://leetcode.cn/problems/3sum/